// pages/detail/detail.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    id: null,
    product: {
      id: 1,
      name: '招牌奶茶',
      price: 18,
      originPrice: 22,
      desc: '招牌奶茶，香浓顺滑，回味无穷，带给你纯正的奶茶体验。',
      sales: 232,
      favorRate: '98%',
      images: [
        '/images/products/product1.jpg',
        '/images/products/product1_detail1.jpg',
        '/images/products/product1_detail2.jpg'
      ],
      options: {
        size: [
          { id: 1, name: '中杯', price: 0, isDefault: true },
          { id: 2, name: '大杯', price: 2, isDefault: false }
        ],
        sugar: [
          { id: 1, name: '正常糖', isDefault: true },
          { id: 2, name: '少糖', isDefault: false },
          { id: 3, name: '半糖', isDefault: false },
          { id: 4, name: '微糖', isDefault: false },
          { id: 5, name: '无糖', isDefault: false }
        ],
        ice: [
          { id: 1, name: '正常冰', isDefault: true },
          { id: 2, name: '少冰', isDefault: false },
          { id: 3, name: '去冰', isDefault: false },
          { id: 4, name: '温', isDefault: false },
          { id: 5, name: '热', isDefault: false }
        ],
        addon: [
          { id: 1, name: '珍珠', price: 2, isDefault: false },
          { id: 2, name: '椰果', price: 2, isDefault: false },
          { id: 3, name: '仙草', price: 2, isDefault: false },
          { id: 4, name: '奶盖', price: 6, isDefault: false }
        ]
      }
    },
    selectedOptions: {
      size: { id: 1, name: '中杯', price: 0 },
      sugar: { id: 1, name: '正常糖' },
      ice: { id: 1, name: '正常冰' },
      addon: []
    },
    quantity: 1,
    totalPrice: 18,
    cartCount: 0,
    addonSelectedMap: {} // 用于存储配料选中状态的映射
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const id = options.id;
    // 根据ID加载商品详情
    // 实际项目中应该调用API获取数据
    this.setData({
      id: id,
      totalPrice: this.data.product.price
    });

    // 获取购物车数量
    this.getCartCount();

    // 初始化配料选中状态映射
    this.updateAddonSelectedMap();
  },

  // 更新配料选中状态的映射
  updateAddonSelectedMap() {
    const { selectedOptions } = this.data;
    const addonSelectedMap = {};

    // 将已选配料的ID作为键，值为true表示已选中
    selectedOptions.addon.forEach(item => {
      addonSelectedMap[item.id] = true;
    });

    this.setData({
      addonSelectedMap
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 获取购物车商品数量
  getCartCount() {
    // 从本地存储获取购物车数据
    const cartList = wx.getStorageSync('cartList') || [];

    // 计算商品总数
    let count = 0;
    cartList.forEach(item => {
      count += item.quantity;
    });

    this.setData({
      cartCount: count
    });
  },

  // 选择商品规格
  selectOption(e) {
    const { type, id } = e.currentTarget.dataset;
    const options = this.data.product.options;

    if (type === 'addon') {
      // 多选配料处理
      let addonList = [...this.data.selectedOptions.addon];
      const addon = options.addon.find(item => item.id === id);

      const index = addonList.findIndex(item => item.id === id);
      if (index > -1) {
        // 已选中，则取消
        addonList.splice(index, 1);
      } else {
        // 未选中，则添加
        addonList.push({
          id: addon.id,
          name: addon.name,
          price: addon.price
        });
      }

      this.setData({
        'selectedOptions.addon': addonList
      });

      // 更新配料选中状态映射
      this.updateAddonSelectedMap();
    } else {
      // 单选项处理
      const option = options[type].find(item => item.id === id);

      this.setData({
        [`selectedOptions.${type}`]: {
          id: option.id,
          name: option.name,
          price: option.price || 0
        }
      });
    }

    // 计算总价
    this.calculateTotal();
  },

  // 检查配料是否已选中
  isAddonSelected(addonId) {
    return this.data.addonSelectedMap[addonId] || false;
  },

  // 增加数量
  addQuantity() {
    const quantity = this.data.quantity + 1;
    this.setData({
      quantity
    });
    this.calculateTotal();
  },

  // 减少数量
  minusQuantity() {
    if (this.data.quantity <= 1) return;
    const quantity = this.data.quantity - 1;
    this.setData({
      quantity
    });
    this.calculateTotal();
  },

  // 计算总价
  calculateTotal() {
    const { product, selectedOptions, quantity } = this.data;
    let basePrice = product.price;

    // 加上规格差价
    if (selectedOptions.size && selectedOptions.size.price) {
      basePrice += selectedOptions.size.price;
    }

    // 加上配料价格
    let addonPrice = 0;
    if (selectedOptions.addon.length > 0) {
      addonPrice = selectedOptions.addon.reduce((sum, item) => sum + (item.price || 0), 0);
    }

    const totalPrice = (basePrice + addonPrice) * quantity;

    this.setData({
      totalPrice: totalPrice.toFixed(2)
    });
  },

  // 加入购物车
  addToCart() {
    const { product, selectedOptions, quantity, totalPrice } = this.data;

    // 组装购物车数据
    const cartItem = {
      id: product.id,
      name: product.name,
      price: parseFloat(product.price), // 基础价格
      image: product.images[0],
      size: selectedOptions.size,
      sugar: selectedOptions.sugar,
      ice: selectedOptions.ice,
      addon: selectedOptions.addon,
      quantity: quantity,
      itemTotal: parseFloat(totalPrice)
    };

    // 先保存到本地，确保数据不丢失
    let cartList = wx.getStorageSync('cartList') || [];

    // 检查是否已有相同商品（相同ID、相同规格和配料）
    const existItemIndex = cartList.findIndex(item => {
      if (item.id !== cartItem.id) return false;
      if (item.size && cartItem.size && item.size.id !== cartItem.size.id) return false;
      if (item.sugar && cartItem.sugar && item.sugar.id !== cartItem.sugar.id) return false;
      if (item.ice && cartItem.ice && item.ice.id !== cartItem.ice.id) return false;

      // 检查配料是否相同
      if ((!item.addon || !cartItem.addon) || item.addon.length !== cartItem.addon.length) return false;

      // 深度比较配料
      const itemAddonIds = item.addon.map(a => a.id).sort().join(',');
      const cartItemAddonIds = cartItem.addon.map(a => a.id).sort().join(',');
      return itemAddonIds === cartItemAddonIds;
    });

    if (existItemIndex > -1) {
      // 已有相同商品，增加数量
      cartList[existItemIndex].quantity += quantity;
      cartList[existItemIndex].itemTotal = parseFloat((cartList[existItemIndex].price * cartList[existItemIndex].quantity).toFixed(2));
    } else {
      // 添加新商品
      cartList.push(cartItem);
    }

    // 先保存到本地存储，确保数据不丢失
    wx.setStorageSync('cartList', cartList);

    // 显示加载提示
    wx.showLoading({
      title: '添加中...',
      mask: true
    });

    // 尝试更新到云端
    try {
      wx.cloud.callFunction({
        name: 'updateCart',
        data: {
          items: cartList
        }
      })
        .then(res => {
          wx.hideLoading();
          console.log('云端更新成功:', res);

          wx.showToast({
            title: '已加入购物车',
            icon: 'success'
          });
        })
        .catch(err => {
          wx.hideLoading();
          console.error('云端更新失败:', err);

          // 即使云端更新失败，本地数据已保存，所以仍然显示成功
          wx.showToast({
            title: '已加入购物车',
            icon: 'success'
          });
        });
    } catch (error) {
      wx.hideLoading();
      console.error('云函数调用异常:', error);

      // 出错也显示成功，因为本地已保存
      wx.showToast({
        title: '已加入购物车',
        icon: 'success'
      });
    }

    // 更新购物车数量
    this.getCartCount();
  },

  // 立即购买
  buyNow() {
    // 先加入购物车，然后跳转到结算页面
    this.addToCart();

    wx.navigateTo({
      url: '/pages/order/order'
    });
  },

  // 跳转到购物车页面
  toCart() {
    wx.switchTab({
      url: '/pages/cart/cart'
    });
  }
})